package com.example.lottery.common.pojo;

import com.example.lottery.common.errorcode.ErrorCode;
import com.example.lottery.common.errorcode.GlobalErrorCodeConstants;
import lombok.Data;
import org.springframework.util.Assert;

/**
 * 统一返回结果
 * @param <T>
 */

/**
 * 序列化时需要用到get方法所以@Data
 * @param <T>
 */
@Data
public class CommonResult <T>{
    /**
     * 返回码
     */
    private Integer code;
    /**
     * 错误信息
     */
    private String msg;
    /**
     * 返回数据
     */
    private T data;

    /**
     * 需要无参的构造方法，否则无法反序列化
     */
    public CommonResult() {
    }

    /**
     * 提供构造方法，为下面的静态方法提供服务
     */
    //success使用
    public CommonResult(T data){
        this.code= GlobalErrorCodeConstants.SUCCESS.getCode();
        this.msg=GlobalErrorCodeConstants.SUCCESS.getMsg();
        this.data=data;
    }
    //error使用
    public CommonResult(Integer code,String msg){
        this.code=code;
        this.msg=msg;
    }
    public CommonResult(ErrorCode errorCode){
        this.code=errorCode.getCode();
        this.msg=errorCode.getMsg();
    }
    /**
     * 静态方法 使用构造方法
     */
    //success
    public static <T> CommonResult<T> success(T data){
        return new CommonResult<T>(data);
    }
    public static <T> CommonResult<T> error(Integer code,String msg){
        //不为ture抛出异常,不往下执行
        Assert.isTrue(!code.equals(GlobalErrorCodeConstants.SUCCESS.getCode()),"code为200");
        return new CommonResult<T>(code,msg);
    }
    public static <T> CommonResult<T> error(ErrorCode errorCode){
        return new CommonResult<T>(errorCode);
    }

}
